﻿using System.Collections.Generic;
using System.Linq;
using System;
using PSE.Tools.Util.Entidades;
using PSE.Tools.Util.ExtensoesMetodos;

namespace PSE.Tools.CadastroMensagens.Entidades
{
    public class Perfil : IEntidade
    {
        #region [ Propriedades ]

        /// <summary>
        /// Código do Perfil
        /// </summary>
        public int Id { get; set; }

        /// <summary>
        /// Perfil
        /// </summary>
        public string PerfilSalvo { get; set; }

        /// Usuário com o perfil Salvo
        /// </summary>
        public int UsuarioPerfil { get; set; }

        /// Criador do Perfil
        /// </summary>
        public int? IdCriadoPor { get; set; }

        /// <summary>
        /// Data da Criação do Perfil
        /// </summary>
        public DateTime CriadoEm { get; set; }

        /// <summary>
        /// Alterador do Perfil
        /// </summary>
        public int? IdAtualizadoPor { get; set; }

        /// <summary>
        /// Data da Atualização do Perfil
        /// </summary>
        public DateTime? AtualizadoEm { get; set; }

        /// <summary>
        /// Indica se a propriedade está válida
        /// </summary>
        public bool EntidadeValida { get { return MensagensValidacoesEntidades().Count() == 0; } }

        #endregion [ Métodos ]

        #region IEntidade Members        

        /// <summary>
        /// Lista de Mensagens de validações da Entidade.
        /// </summary>
        /// <returns></returns>
        public IEnumerable<ValidacaoEntidade> MensagensValidacoesEntidades()
        {
            if (string.IsNullOrEmpty(PerfilSalvo))
                yield return new ValidacaoEntidade { Mensagem = "O perfil salvo é obrigatório", TituloPropriedade = "Perfil Salvo", NomePropriedade = "PerfilSalvo" };

            //if (string.IsNullOrEmpty(UsuarioPerfil))
            //    yield return new ValidacaoEntidade { Mensagem = "É necessário associar o perfil salvo a algum usuário", TituloPropriedade = "Usuário Dono do Perfil", NomePropriedade = "UsuarioPerfil" };

            //if (string.IsNullOrEmpty(CriadoPor))
            //    yield return new ValidacaoEntidade { Mensagem = "Informe o Usuário que salvou o perfil", NomePropriedade = "CriadoPor", TituloPropriedade = "Criado por" };

            //if (!string.IsNullOrEmpty(CriadoPor) && CriadoPor.Length > 20)
            //    yield return new ValidacaoEntidade { Mensagem = "O campo Criado por não pode conter mais do que 20 caracteres", NomePropriedade = "CriadoPor", TituloPropriedade = "Criado por" };

            //if (CriadoEm.LessOrEqualsThan(DateTime.Now))
            //    yield return new ValidacaoEntidade { Mensagem = "Data de Criação Inválida", NomePropriedade = "CriadoEm", TituloPropriedade = "Criado em" };

            //if (!string.IsNullOrEmpty(AtualizadoPor) && AtualizadoPor.Length > 20)
            //    yield return new ValidacaoEntidade { Mensagem = "O campo Atualizado Por não pode conter mais do que 20 caracteres", NomePropriedade = "AtualizadoPor", TituloPropriedade = "Atualizado por" };

            //if (AtualizadoEm.HasValue)
            //    if (AtualizadoEm.Value.LessOrEqualsThan(DateTime.Now))
            //        yield return new ValidacaoEntidade { Mensagem = "Data de Atualização Inválida", NomePropriedade = "AtualizadoEm", TituloPropriedade = "Atualizado em" };
        }

        #endregion [ Métodos]
    }
}
